package com.algorithm.ch1.cjm.math;

/**
 * 3的幂
 * 给定一个整数，写一个函数来判断它是否是 3 的幂次方。
 *
 * 你能不使用循环或者递归来完成本题吗？
 * @Author: Jie Ming Chen
 * @Date: 2018/9/13
 * @Version 1.0
 */
public class IsPowerOfThree {


    public boolean isPowerOfThree(int n) {

        int res = 1;
        while (true) {

            if (res == n) {
                return true;
            } else if (res > n) {
                return false;
            }

            if (res > Integer.MAX_VALUE/3) {
                return false;
            }

            res = res * 3;
        }
    }

    /**
     * leetcode 最优解
     * @param n
     * @return
     */
    public boolean isPowerOfThree1(int n) {
        return n>0 && (1162261467 %n)==0;
    }

    public static void main(String[] args) {
        boolean powerOfThree = new IsPowerOfThree().isPowerOfThree(2147483647);

        System.out.println(powerOfThree);
    }
}
